package com.zfzs.post.modules.common.service;

import com.zfzs.post.modules.common.domain.AgentContact;
import com.zfzs.post.modules.common.domain.AgentTree;

import java.util.List;

/**
 * 代理商关系
 *
 * @author: ck
 * @create: 2019/8/20/15:16
 **/
public interface AgentContactService {

    /**
     * 根据id获取单个
     * @param id
     * @return
     */
    AgentContact findOne(Long id);

    /**
     *更新树形关系
     * @param agentId
     * @param pidId
     * @param channelId
     */
    void updateContact(Long agentId,Long pidId,Long channelId);

    /**
     * 储存or 修改
     * @param agentContact
     * @return
     */
    AgentContact save(AgentContact agentContact);

    /**
     * 查询所有父级（含自己）
     * @param agentId
     * @param channelId
     * @return
     */
    List<AgentContact> findAllParent(Long agentId,Long channelId);

    /**
     * 查询所有父级id（含自己）
     * @param agentId
     * @param channelId
     * @return
     */
    List<Long> findAllParentIdList(Long agentId,Long channelId);

    /**
     * 查询所有
     * @return
     */
    List<AgentContact> queryAll();

    /**
     * 查询所有合伙人(直营+间接)
     * @param agentId
     * @param channelId
     * @return
     */
    List<Long> findAllTeamIdsExceptSelf(Long agentId,Long channelId);

    /**
     * 查询所有合伙人(直营+间接+自己)
     * @param agentId
     * @param channelId
     * @return
     */
    List<Long> findAllTeamIds(Long agentId,Long channelId);


    /**
     * 根据id查询所有
     * @param agentId
     * @param channelId
     * @return
     */
    List<AgentContact> findByAgentId(Long agentId,Long channelId);

    /**
     * 查询直属
     * @param agentId
     * @param channelId
     * @return
     */
    List<Long> findDirectlyIds(Long agentId,Long channelId);

    /**
     * 合伙人id（间接）
     * @param agentId
     * @param channelId
     * @return
     */
    List<Long> findPartnerTeam(Long agentId,Long channelId);

    /**
     * 根据团队类型以及上级获取下级id列表
     * @param teamType enums:
     * @param agentId
     * @param channelId
     * @return
     */
    List<Long> findListByTeamType(String teamType,Long agentId,Long channelId);
}
